﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ASPLanchonete.controller;
using ASPLanchonete.classes;
using System.Data;
using ASPLanchonete.Funcoes;

namespace ASPLanchonete.Telas
{
    public partial class PedidoView : System.Web.UI.Page
    {
        FornecedorController fornecedorController = new FornecedorController();
        ProdutoController produtoController = new ProdutoController();
        PedidoController pedidoController;
        List<ItemPedido> listaItemPedido = new List<ItemPedido>();
        IList<Produto> produtos;
        DataTable dadosPedido = new DataTable();
        Pedido pedido = new Pedido();
        List<ItemPedido> itensPedido = new List<ItemPedido>();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["TipoUsuario"] == null || !ControleAcessoTela.ConfirmaAcessoTela("PedidoView", Session["TipoUsuario"]))
                Response.Redirect("~/Default.aspx");


            ((SiteCadastro)Page.Master).btnSalvar.Click += new EventHandler(Salvar);
            ((SiteCadastro)Page.Master).btnPesquisa.Click += new EventHandler(Pesquisar);
            ((SiteCadastro)Page.Master).btnLimpar.Click += new EventHandler(LimparCampos);

            if (!IsPostBack)
            {
                Session.Add("ListaItemPedido", null);
                IList<Fornecedor> fornecedores = fornecedorController.Recuperar();
                produtos = produtoController.Recuperar();

                drdListaFornecedor.Items.Add(new ListItem("Selecione", "0"));
                drdListaProduto.Items.Add(new ListItem("Selecione", "0"));

                foreach (Fornecedor fornecedor in fornecedores)
                {
                    drdListaFornecedor.Items.Add(new ListItem(fornecedor.NomeFornecedor, fornecedor.Id.ToString()));
                }
                foreach (Produto produto in produtos)
                {
                    drdListaProduto.Items.Add(new ListItem(produto.NomeProduto, produto.Id.ToString()));
                }
            }

            dadosPedido.Columns.Add(new DataColumn("Produto", typeof(string)));
            dadosPedido.Columns.Add(new DataColumn("Qtde", typeof(Int32)));
            dadosPedido.Columns.Add(new DataColumn("DataPrevista", typeof(DateTime)));
        }

        protected void ExibeMensagem(string msg)
        {
            ((SiteCadastro)Page.Master).txtResultado.Text = msg;
        }

        protected void Salvar(object sender, EventArgs e)
        {
            string msg = "";
            try
            {
                pedidoController = new PedidoController();
                pedido = new Pedido();
                itensPedido = new List<ItemPedido>();
                pedido.Id = Convert.ToInt32(txtCodigo.Text);
                pedido.IdFornecedor = Int32.Parse(drdListaFornecedor.SelectedValue);
                pedido.IdUsuario = Convert.ToInt32(Session["IdUsuario"]);

                foreach (var itemPedido in (List<ItemPedido>)Session["ListaItemPedido"])
                {
                    itensPedido.Add(itemPedido);
                }

                msg = pedidoController.Salvar(pedido, itensPedido);
                txtCodigo.Text = pedido.Id.ToString();
            }
            catch (Exception ex)
            {
                msg = "Erro: " + ex.Message.ToString();
            }
            finally
            {
                ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
                ExibeMensagem(msg);
            }
        }

        protected void Pesquisar(object sender, EventArgs e)
        {
            if (ValidaCamposPesquisa())
                LimparCampos(sender, e);
            else
            {
                try
                {
                    pedidoController = new PedidoController();
                    int id = Convert.ToInt32(((SiteCadastro)Page.Master).txtPesquisaCodigo.Text);
                    pedido = new Pedido();
                    pedido = pedidoController.PesquisarPorId(id);
                    if (pedido == null)
                        LimparCampos(sender, e);
                    else
                    {
                        RedefinirCampos();
                    }
                }
                catch (Exception ex)
                {
                    LimparCampos(sender, e);
                    ExibeMensagem(ex.ToString());
                }
            }
        }

        private bool ValidaCamposPesquisa()
        {
            if (((SiteCadastro)Page.Master).txtPesquisaCodigo == null || ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text.Equals("") || ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text.Equals("0"))
                return true;
            else
                return false;
        }

        protected void btnAdicionar_Click(object sender, EventArgs e)
        {
            DataRow dr;
            if (drdListaProduto != null && drdListaProduto.SelectedIndex != 0 && txtQtde != null && !txtQtde.Text.Equals("") && !txtDataPrevista.Text.Equals("") && txtDataPrevista != null)
            {
                decimal quantitade = Decimal.Zero;
                if (Decimal.TryParse(txtQtde.Text, out quantitade))
                {
                    ItemPedido item = new ItemPedido();
                    Produto produto = new Produto();
                    produto.Id = Convert.ToInt32(drdListaProduto.SelectedValue.ToString());
                    produto.Descricao = drdListaProduto.SelectedItem.Text;
                    item.Produto = produto;
                    item.Qtde = quantitade;
                    item.DataPrevista = DateTime.Parse(txtDataPrevista.Text);
                    item.IdProduto = produto.Id;
                    item.IdPedido = Convert.ToInt32(txtCodigo.Text);

                    if (Session["ListaItemPedido"] != null)
                        listaItemPedido = (List<ItemPedido>)Session["ListaItemPedido"];
                    else
                    {
                        Session.Add("ListaItemPedido", null);
                        listaItemPedido = new List<ItemPedido>();
                    }
                    listaItemPedido.Add(item);
                    Session["ListaItemPedido"] = listaItemPedido;
                    drdListaProduto.SelectedIndex = 0;
                    txtDataPrevista.Text = null;
                    txtQtde.Text = null;

                    foreach (var itemPedido in listaItemPedido)
                    {
                        dr = dadosPedido.NewRow();
                        dr[0] = itemPedido.Produto.Descricao;
                        dr[1] = itemPedido.Qtde;
                        dr[2] = itemPedido.DataPrevista;

                        dadosPedido.Rows.Add(dr);
                    }

                    dtlItemPedido.DataSource = dadosPedido;
                    dtlItemPedido.DataBind();
                    ((SiteCadastro)Page.Master).txtResultado.Text = null;
                }
            }
        }

        private void LimparCampos(object sender, EventArgs e)
        {
            ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
            ((SiteCadastro)Page.Master).txtResultado.Text = null;
            Session["ListaItemPedido"] = null;
            txtCodigo.Text = "0";
            drdListaFornecedor.SelectedIndex = 0;
            drdListaProduto.SelectedIndex = 0;
            txtDataPrevista.Text = null;
            txtQtde.Text = null;
            dtlItemPedido.DataSource = null;
            dtlItemPedido.DataBind();
        }

        private void RedefinirCampos()
        {
            ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
            ((SiteCadastro)Page.Master).txtResultado.Text = null;
            txtCodigo.Text = pedido.Id.ToString();
            drdListaFornecedor.SelectedValue = pedido.IdFornecedor.ToString();
            Session["ListaItemPedido"] = pedido.ItemPedido;
            DataRow dr;


            foreach (var itemPedido in pedido.ItemPedido)
            {
                dr = dadosPedido.NewRow();
                dr[0] = itemPedido.Produto.Descricao;
                dr[1] = itemPedido.Qtde;
                dr[2] = itemPedido.DataPrevista;

                dadosPedido.Rows.Add(dr);
            }

            dtlItemPedido.DataSource = dadosPedido;
            dtlItemPedido.DataBind();
        }
    }
}